import 'package:json_annotation/json_annotation.dart';

import 'port.dart';

part 'team_and_port.g.dart';

@JsonSerializable()
class TeamAndPort {
  final int curPersonCount; // 所在团组当前人数
  final int curPortCount; // 当前用户现有的已开通的拼购窗口数
  final double joinFee; // 单个拼购窗口的手续费额度
  final String joinFeeAccountType; // 拼购窗口手续费的积分类型
  final String joinFeeAccountTypeName; // 拼购窗口手续费积分类型的名称，仅用于显示
  final String joinFeeAccountBalance;
  final int maxPortCount; // 当前用户最大可申请的拼购窗口数
  final int maxTimeLen; // 团组开团后至关团时间的时长，单位：秒
  final int minPersonCount; // 团组满团需要的人数
  final String openPortAccountType; // 窗口开通费用扣除账户类型
  final String openPortAccountTypeName; // 窗口开通费用扣除账户类型名称，仅用于显示
  final String openPortFee; // 单个窗口开通费用额度，仅用于显示
  @JsonKey(defaultValue: [])
  final List<Port> portVos; // 拼购窗口信息列表
  final DateTime startTime; // 当前团组开团时间
  final String statusText; // 拼购团组当前状态信息；不为空时，APP端直接显示本状态信息。例如，今日拼购活动尚未开始或已结束
  final String teamCode; // 当前团组编码
  final int termId; // 当前团组ID
  final double totalPrice; // 拼购一次商品需要支付的商品货款，其类型与手续费积分类型相同
  final String
      validTimeRange; // 每日开发的整点时间范围， 格式：{起始整点时间}-{截止整点时间}， 例如：09-17表示从上午9：00（含）到下午18：00(不含)。
  final bool needPassword;

  TeamAndPort(
    this.curPersonCount,
    this.curPortCount,
    this.joinFee,
    this.joinFeeAccountType,
    this.joinFeeAccountTypeName,
    this.joinFeeAccountBalance,
    this.maxPortCount,
    this.maxTimeLen,
    this.minPersonCount,
    this.openPortAccountType,
    this.openPortAccountTypeName,
    this.openPortFee,
    this.portVos,
    this.startTime,
    this.statusText,
    this.teamCode,
    this.termId,
    this.totalPrice,
    this.validTimeRange,
    this.needPassword,
  );

  factory TeamAndPort.fromJson(Map<String, dynamic> json) => _$TeamAndPortFromJson(json);

  Map<String, dynamic> toJson() => _$TeamAndPortToJson(this);
}
